import numpy as np
import pandas as pd
import json
import ast

# 读取 Excel 文件
df = pd.read_excel('D:\Microsoft Edge\订单数据.xlsx')


# 定义一个函数，用于拆分订单菜品数据
def split_gwc_data(gwc):
    try:
        gwc_data = json.loads(gwc)
        return pd.Series(gwc_data['gwc'])
    except json.JSONDecodeError:
        return pd.Series([{'id': None, 'title': None, 'price': None, 'count': None}])


# 拆分订单菜品数据
split_data = df['gwc'].apply(split_gwc_data)

# 将拆分后的数据合并回原 DataFrame
df = pd.concat([df, split_data], axis=1)

# 将拆分后的数据保存为新的 Excel 文件
df.to_excel('订单数据.xlsx', index=False)

# 读取Excel文件
df = pd.read_excel('订单数据.xlsx')

# 删除原始 "订单菜品" 列
df.drop('订单菜品', axis=1, inplace=True)


# 定义函数，对字典列进行处理
def clean_dict_column(df, col):
    df[col] = df[col].apply(
        lambda x: ast.literal_eval(x) if pd.notna(x) else {'id': None, 'title': None, 'price': None,
                                                           'count': None})
    return df


# 处理字典列的步骤
for col in df.columns:
    if isinstance(col, (
            int, np.int64, np.int32, np.int16, np.int8, np.uint64, np.uint32, np.uint16, np.uint8)):  # 只处理列名为数字的列
        df = clean_dict_column(df, col)

# 保存到新的Excel文件
df.to_excel('output_processed_data.xlsx', index=False)

# 读取初始的 Excel 文件
df = pd.read_excel('output_processed_data.xlsx')

# 确定数字列
numeric_columns_list = [col for col in df.columns if str(col).isdigit()]

# 创建一个空列表以存储单独的数据框
table_list = []

# 分别处理每个数字列
for col in numeric_columns_list:
    # 重新读取 Excel 文件（以获得原始 DataFrame）
    df = pd.read_excel('output_processed_data.xlsx')

    # 将字符串表示的字典转换为字典对象
    df[col] = df[col].apply(ast.literal_eval)

    # 将字典拆分成多列
    df = pd.concat([df, df[col].apply(pd.Series)], axis=1)

    # 删除原始的字典列
    df = df.drop(columns=numeric_columns_list)

    # # 构建动态的文件名
    # output_filename = f'output_{col}.xlsx'
    #
    # # 导出处理后的 DataFrame 到 Excel 文件
    # df.to_excel(output_filename, index=False)

    # 将处理后的 DataFrame 追加到列表中
    table_list.append(df)

# 合并所有表格对象，增加行
merged_df = pd.concat(table_list, ignore_index=True)

merged_df.drop('status', axis=1, inplace=True)
merged_df.drop('total', axis=1, inplace=True)
# 删除id列为None的行
merged_df = merged_df[merged_df['id'].notna()]
# 导出合并后的 DataFrame 到新的 Excel 文件
merged_df.to_excel('merged_table.xlsx', index=False)


# # 按间距中的绿色按钮以运行脚本。
# if __name__ == '__main__':
#
#
# # 访问 https://www.jetbrains.com/help/pycharm/ 获取 PyCharm 帮助